package com.kaifamiao.io.d0922;

import java.io.*;
import java.util.Arrays;

public class FileCombiner {

    /**
     * 将指定目录中的多个文件片段依次序合并到同一个文件中，并返回合并后的文件体积
     * @param dir 存放文件片段的目录(即拆分文件后的N个小文件的存放目录)
     * @param target 表示合并后的文件的存放路径
     * @return 返回合并后的文件体积
     */
    public long join(final File dir, final File target) {
        long size = 0 ; // 声明用于统计合并后的文件体积的变量
        if (dir.isDirectory()){
            File[] files = dir.listFiles();
            try(FileOutputStream fos = new FileOutputStream(target, true)){

                for(File file : files){
                    FileInputStream fis = new FileInputStream(file);

                    // 1. jdk 8
//                    byte[] bytes = new byte[1024];
//                    int len = -1;
//                    while( (len = fis.read(bytes)) != -1 ){
//                        fos.write(bytes, 0, len);
//                        size += len;
//                    }


                    // jdk 9
                    byte[] bytes = fis.readAllBytes();
                    size += bytes.length;
                    fos.write(bytes);

                    fis.close();
                }

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return size ; // 返回合并后的文件体积
    }

    public static void main(String[] args) {

        FileCombiner fc = new FileCombiner();

        File dir = new File("D:/cutter3"); // 文件片段所在的目录

        File target = new File( "D:/video-combined.mp4" ); // 合并后的文件存放路径和名称

        long n = fc.join(dir, target);

        System.out.println(n);

    }
}
